/**
 * Created by CJB on 2015/11/11.
 */

/**
 * jquery黏贴事件
 * @param delay
 * @returns {*|jQuery}
 */
$.fn.pasteEvents = function( delay ) {
    if (delay == undefined) delay = 20;
    return $(this).each(function() {
        var $el = $(this);
        $el.on("paste", function() {
            $el.trigger("prepaste");
            setTimeout(function() { $el.trigger("postpaste"); }, delay);
        });
    });
};

/**
 * 获取当前项目完整路径
 * @returns {string}
 */
function getPath() {
    //获取当前网址
    var curPath = window.document.location.href;
    //获取主机地址后的目录
    var pathName = window.document.location.pathname;
    var pos = curPath.indexOf(pathName);
    //获取主机地址
    var localhostPath = curPath.substring(0, pos);
    //获取项目名称
    var projectName = pathName.substring(0, pathName.substr(1).indexOf("/") + 1);
    return localhostPath + projectName + "/";
}

//实现js的repalceAll方法
String.prototype.replaceAll = function (s1, s2) {
    return this.replace(new RegExp(s1, "gm"), s2);
};

/**获取url传递的参数
 * 使用方法：getRequest("参数");
 */
function getRequest(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    var r = window.location.search.substr(1).match(reg);
    if (r != null)
        return (r[2]);
    return null;
}

/*
 * url 目标url
 * arg 需要替换的参数名称
 * arg_val 替换后的参数的值
 * return url 参数替换后的url
 */
function replaceRequest(url,arg,arg_val){
    var pattern=arg+'=([^&]*)';
    var replaceText=arg+'='+arg_val;
    if(url.match(pattern)){
        var tmp='/('+ arg+'=)([^&]*)/gi';
        tmp=url.replace(eval(tmp),replaceText);
        return tmp;
    }else{
        if(url.match('[\?]')){
            return url+'&'+replaceText;
        }else{
            return url+'?'+replaceText;
        }
    }
    return url+'\n'+arg+'\n'+arg_val;
}

/**
 * 生产uuid
 * @returns {string}
 */
function uuid() {
    var CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
    var chars = CHARS, uuid = new Array(36), rnd=0, r;
    for (var i = 0; i < 36; i++) {
        if (i==8 || i==13 ||  i==18 || i==23) {
            uuid[i] = '-';
        } else if (i==14) {
            uuid[i] = '4';
        } else {
            if (rnd <= 0x02) rnd = 0x2000000 + (Math.random()*0x1000000)|0;
            r = rnd & 0xf;
            rnd = rnd >> 4;
            uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
        }
    }
    return uuid.join('');
}

//使用示例
//setCookie("name", "hayden");
//alert(getCookie("name"));
//写cookies
function setCookie(name, value) {
    var Days = 30;
    var exp = new Date();
    exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
    document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString();
}

//读取cookies
function getCookie(name) {
    var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
    if (arr = document.cookie.match(reg))
        return unescape(arr[2]);
    else
        return null;
}

//删除cookies
function delCookie(name) {
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    var cval = getCookie(name);
    if (cval != null)
        document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
}

/**
 * 创建信息提示框
 * @param toolTips 保存所有的信息提示
 * @param atrgetID 目标控件
 * @returns {*} 信息提示控件
 */
function createTooltip(toolTips, atrgetID, options){
    options = $.extend({
        outside: 'x',
        fade: 0,
        pointer:true,
        autoOepn:true
    },options || {});
    var element = $("#" + atrgetID);
    var toolTip = toolTips[atrgetID];
    if(!toolTip){
        toolTip =   element.jBox('Tooltip', {
            id:atrgetID + "-error",
            position: {
                x: 'right',
                y: 'center'
            },
            outside: options.outside,
            fade: options.fade,
            pointer:options.pointer
        });
        element.trigger("mouseenter");
        toolTips[atrgetID] = toolTip;
    } else{
        if(options.autoOepn){
            toolTip.attach();
            element.trigger("mouseenter");
        }
    }
    return toolTip;
}

//===============================
//数据格式化  Start
//===============================
/** * 对Date的扩展，将 Date 转化为指定格式的String * 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q)
可以用 1-2 个占位符 * 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字) * eg: * (new
Date()).pattern("yyyy-MM-dd hh:mm:ss.S")==> 2006-07-02 08:09:04.423
* (new Date()).pattern("yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 二 20:09:04
* (new Date()).pattern("yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 周二 08:09:04
* (new Date()).pattern("yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 星期二 08:09:04
* (new Date()).pattern("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
*/
Date.prototype.pattern = function(fmt) {
	var o = {
		"M+" : this.getMonth() + 1, // 月份
		"d+" : this.getDate(), // 日
		"h+" : this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, // 小时
		"H+" : this.getHours(), // 小时
		"m+" : this.getMinutes(), // 分
		"s+" : this.getSeconds(), // 秒
		"q+" : Math.floor((this.getMonth() + 3) / 3), // 季度
		"S" : this.getMilliseconds()// 毫秒
	};
	var week = {
		"0" : "/u65e5",
		"1" : "/u4e00",
		"2" : "/u4e8c",
		"3" : "/u4e09",
		"4" : "/u56db",
		"5" : "/u4e94",
		"6" : "/u516d"
	};
	if (/(y+)/.test(fmt)) {
		fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
	}
	if (/(E+)/.test(fmt)) {
		fmt = fmt.replace(RegExp.$1,((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "/u661f/u671f": "/u5468"): "")+ week[this.getDay() + ""]);
	}
	for ( var k in o) {
		if (new RegExp("(" + k + ")").test(fmt)) {
			fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]): (("00" + o[k]).substr(("" + o[k]).length)));
		}
	}
	return fmt;
};

// parseDate
function parseDate(value, formatter) {
	if (formatter == null || formatter == "undefined" || formatter == "") {
		formatter = "yyyy-MM-dd";
	}
	if (value == null)
		return "";
	if (formatter == "yyyy-MM-dd") {
		var a = value.split("-");
		return new Date(a[0], parseInt(a[1], 10) - 1, a[2]);
	} else if (formatter == "yyyy/MM/dd") {
		var a = value.split("/");
		return new Date(a[0], parseInt(a[1], 10) - 1, a[2]);
	} else if (formatter == "yyyy.MM.dd") {
		var a = value.split(".");
		return new Date(a[0], parseInt(a[1], 10) - 1, a[2]);
	} else if (formatter == "yyyy-MM") {
		var a = value.split("-");
		return new Date(a[0], parseInt(a[1], 10) - 1, 1);
	} else if (formatter == "yyyy/MM") {
		var a = value.split("/");
		return new Date(a[0], parseInt(a[1], 10) - 1, 1);
	} else if (formatter == "yyyy.MM") {
		var a = value.split(".");
		return new Date(a[0], parseInt(a[1], 10) - 1, 1);
	} else
		return "";
}
/**
 * 将字符串转成时间，格式为yyyy-MM-dd HH:mm:ss
 * 
 * @param value
 */
function parseDateTime(value) {
	value = value.replace(/-/g, "/");
	var date = new Date(value);
	return date;
}
function formatDate(value, formatter) {
    if (value == null || value == '') {
        return '';
    }
    var year = value.getFullYear();
    var month = value.getMonth() + 1;
    var day = value.getDate();
    if (month < 10)
        month = "0" + month;
    if (day < 10)
        day = "0" + day;
    if(!formatter)
    	return year + "-" + month + "-" + day;
    else if(formatter == "yyyy-MM-dd HH:mm:ss") {
    	var hours = value.getHours();
    	var minutes = value.getMinutes();
    	var seconds = value.getSeconds();
    	if(hours < 10)
    		hours = "0"+hours;
    	if(minutes < 10)
    		minutes = "0"+minutes;
    	if(seconds < 10)
    		seconds = "0"+seconds;
    	return year + "-" + month + "-" + day +" "+hours + ":" + minutes+":"+seconds;
    }
}
/**
 * 格式化表格的显示
 * @param value 值
 * @param format 如果是日期，进行日期格式化，如果不是，不填写
 * @returns {*}
 */
function formatResultItemText(value, format){
    return value ? (format ? parseDateTime(value).pattern(format) : value) : '&nbsp;';
}

/**
 * 限制为float
 * @param obj
 */
function keyUpFormatNumber(obj) {
    obj.value = obj.value.replace(/[^\d.]/g,"");  //清除“数字”和“.”以外的字符
    obj.value = obj.value.replace(/^\./g,"");  //验证第一个字符是数字而不是.
    obj.value = obj.value.replace(/\.{2,}/g,"."); //只保留第一个. 清除多余的.
    obj.value = obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
}
/**
 * 限制wie数字
 * @param obj
 */
function keyUpFormatInteger(obj) {
    obj.value = obj.value.replace(/[^\d]/g,"");  //清除“数字”以外的字符
}
//===============================
//数据格式化  End
//===============================
//===============================
// Ajax  Start
//===============================
/**
 * 请求后台，主要用于解析后台返回数据，后台调用方法为this.getJson(isSuccess,result)
 * @param url 地址
 * @param data 参数
 * @param resultFun resultFun(result) result为解析后的结果，即this.getJson(isSuccess,result)中的result
 */
function post(url,data,resultFun,errorFun){
    $.post(url,data,function(data){
        var result = eval("(" + data + ")");
        if(result.isSuccess){
            var resultObject = result.resultObject;
            resultFun(resultObject);
        }else{
            if(errorFun){
                errorFun(result.resultObject);
            }else
                alert(result.resultObject);
        }
    });
}

/**
 * 加载js
 * @param file
 * @param options
 */
function include_js(file,options) {
    options = $.extend({
        loadComplete:null
    },options || {});
    var _doc = document.getElementsByTagName('head')[0];
    var js = document.createElement('script');
    js.setAttribute('type', 'text/javascript');
    js.setAttribute('src', file);
    _doc.appendChild(js);
    if (document.all) { //如果是IE
        js.onreadystatechange = function () {
            if (js.readyState == 'loaded' || js.readyState == 'complete') {
                if(options.loadComplete)
                    options.loadComplete();
            }
        }
    }
    else {
        js.onload = function () {
            if(options.loadComplete)
                options.loadComplete();
        }
    }
}

//===============================
// Ajax  End
//===============================

//深度克隆
function deepClone(obj){
    var result,oClass=isClass(obj);
    //确定result的类型
    if(oClass==="Object"){
        result={};
    }else if(oClass==="Array"){
        result=[];
    }else{
        return obj;
    }
    for(key in obj){
        var copy=obj[key];
        if(isClass(copy)=="Object"){
            result[key]=arguments.callee(copy);//递归调用
        }else if(isClass(copy)=="Array"){
            result[key]=arguments.callee(copy);
        }else{
            result[key]=obj[key];
        }
    }
    return result;
}
//返回传递给他的任意对象的类
function isClass(o){
    if(o===null) return "Null";
    if(o===undefined) return "Undefined";
    return Object.prototype.toString.call(o).slice(8,-1);
}

/**
 * 创建弹出窗口
 * @param label 要显示的文本
 * @param options 其他参数
 * @returns {jQuery|HTMLElement}
 */
function createWindow(label,options){
    options = $.extend({
        width: 200,
        height: 140,
        url: "",
        icon: "",
        callBack:null,
        cancleEnable:false
    },options || {});
    var defaultButtons = {
        "确定":function(){
            if(options.callBack){
                $(this).dialog("close");
                options.callBack();
            }else if(!options.url)
                $(this).dialog("close");
            else
                window.location.href = options.url;
        }
    };
    if(options.cancleEnable)
        defaultButtons["取消"] = function(){
        $(this).dialog("close");
    };

    var promptWindow = $("<div><p style='margin: 5px;color:#3fb72c;'>" + label + "</p></div>");
    promptWindow.appendTo("html");
    promptWindow.dialog({
        autoOpen: false,
        width: options.width,
        height: options.height,
        resizable: false,
        title: "系统提示",
        modal: true,
        close: function(){
            if(!options.url) {
//                $(this).dialog("close");
            } else
                window.location.href = options.url;
        }
    });
    promptWindow.dialog("option",{
        buttons: defaultButtons
    });
    return promptWindow;
}

/**
 * 创建弹出窗口
 * @param label 要显示的文本
 * @param options 其他参数
 * @returns {jQuery|HTMLElement}
 */
function createWindowHeight(label,options){
    options = $.extend({
        width: 200,
        height: 150,
        url: "",
        icon: ""
    },options || {});
    var promptWindow = $("<div><p style='margin: 5px;'>" + label + "？</p></div>");
    promptWindow.appendTo("html");
    promptWindow.dialog({
        autoOpen: false,
        width: options.width,
        height: options.height,
        resizable: false,
        title: "系统提示",
        modal: true,
        buttons: {
            "确定":function(){
                if(!options.url)
                    $(this).dialog("close");
                else
                    window.location.href = options.url;
            }
        },
        close: function(){
            if(!options.url)
                $(this).dialog("close");
            else
                window.location.href = options.url;
        }
    });
    return promptWindow;
}

/**
 * 判断字符串是否不为空，不为空返回true，空返回false
 * @param s
 * @returns
 */
function isNotNull(s) {
	if(s=="") {
		return false;
	}
	var pat = new RegExp("^[ ]+$");
	return !pat.test(s);
}

//===============================
// 表格全选，选中，取消选中  Start
//===============================
/***
 * 点击全选,判断是全选还是取消全选
 * tableId---表格id
 */
function selectAll(tableId){
    //点击全选,判断是全选还是取消全选
    $("#"+tableId+" input#checkAll").click(function(){
        if(this.checked){
            $("#"+tableId+" tr td :checkbox").each(function(){
                this.checked = true;
                $(this).parent().parent().addClass("selected");
            });
        }else{
            $("#"+tableId+" tr td :checkbox").each(function(){
                this.checked = false;
                $(this).parent().parent().removeClass("selected");
            });
        }
    });
}
/***
 * 复选框选择改变，设置此行的样式，并判断当前情况是否为全选的情况
 * tableId---表格id
 */
function changTrCss(tableId){
    $("#"+tableId+" tr td :checkbox").change(function(){
        if(this.checked){
            $(this).parent().parent().addClass("selected");
            var allLen = $("#"+tableId+" tr td :checkbox").length;
            var selectedLen = $("#"+tableId+" tr td input:checked").length;
            if(allLen == selectedLen)
                $("#checkAll")[0].checked = true;
        }else{
            $(this).parent().parent().removeClass("selected");
            $("#checkAll")[0].checked = false;
        }
    });
}
/***
 * 点击一行，改变这行的复选框勾选
 * tableId---表格id
 */
function changeTrCheckboxStatu(tableId){
    $("#"+tableId+" tr td").unbind("click").click(function(){
        var checkbox = $(this).parent().find("td:first :checkbox")[0];
        if(!!checkbox && $(this).children("input:checkbox").length == 0){
            checkbox.checked = !checkbox.checked;
            $(checkbox).trigger("change");
        }
    });
}
/**
 * 改变弹出框表格偶数行的颜色
 * @param tableId 表格id
 * @param option
 */
function changeEvenColor(table){
    if(typeof (table) == "string")
        $("#"+table+" tr:even").addClass("even");
    else if(typeof (table) == "object")
        table.find("tr:even").addClass("even");
}

/**
 * 创建表头
 * @param tableId 表id
 * @param tableFields 表字段
 * {headerText:'',headerField:'',visible:true,minWidth:60,formatName:'formatResultItemText',dateFormat:'yyyy-mm-dd',fieldSate:0}
 * headerText 表格显示的标题
 * headerField 要显示的字段
 * visible 是否可见
 * minWidth 标题最小宽度
 * formatName 字段格式化的函数名称,函数包括formatResultItemText：格式化文本，可自定义，默认formatResultItemText
 * dateFormat 如果是日期，则进行格式化
 * fieldSate:0普通字段，1ID字段，2序号
 */
function createTableHeader(tableId,tableFields){
    var default_options = {formatName:'formatResultItemText',fieldSate:0,visible:true};
    var html = "<tr>";
    for(var x = 0; x < tableFields.length; x++) {
        var filed = tableFields[x];
        var options = deepClone(default_options);
        options = $.extend(options,filed || {});
        if(options.fieldSate == 1){
            html += '<th style="min-width: 30px;' + (options.visible ? '' : 'display:none;') + '"><input id="checkAll" type="checkbox"></th>';
        }else if(options.fieldSate == 2){
            html += '<th style="min-width: 30px;">序号</th>';
        }else {
            var minWidth = filed.minWidth ? filed.minWidth : filed.headerText.length * 15;
            html += '<th style="min-width: '+minWidth+'px;' + (options.visible ? '' : 'display:none;') + '">'+filed.headerText+'</th>';
        }
    }
    html += "</tr>";
    $("#" + tableId).append(html);
}

/**
 * 创建表格内容
 * @param tableId 表id
 * @param tableFields 表字段
 * {headerText:'',headerField:'',visible:true,minWidth:60,formatName:'formatResultItemText',dateFormat:'yyyy-mm-dd',fieldSate:0,render:null}
 * headerText 表格显示的标题
 * headerField 要显示的字段
 * visible 是否可见
 * minWidth 标题最小宽度
 * formatName 字段格式化的函数名称,函数包括formatResultItemText：格式化文本，可自定义，默认formatResultItemText，其他函数只接受要显示的数值
 * dateFormat 如果是日期，则进行格式化
 * fieldSate:0普通字段，1ID字段，2序号
 * render:null,接受4个参数，第一个表头，第二个数据，第三个代表第几条数据，第四个表示第几个字段.
 * @param page 分页数据
 */
function createTable(tableId,tableFields,page){
	var default_options = {formatName:formatResultItemText,fieldSate:0,visible:true};
    var list = page.items;
    if(list && list.length > 0){
        for(var i = 0; i < list.length; i++) {
            var item = list[i];
            var htmlObj = $("<tr" + ( i % 2 == 0 ? "" : " class='even'") + "></tr>");
            for(var x = 0; x < tableFields.length; x++){
                var filed = tableFields[x];
                var options = deepClone(default_options);
                options = $.extend(options,filed || {});
                if(options.render){
                    var result = options.render(filed,item,i,x);
                    if(typeof (result) == "string"){
                        htmlObj.append("<td>" + result + "</td>");
                    }else{
                        var tdObj = $("<td></td>");
                        tdObj.append(result);
                        htmlObj.append(tdObj);
                    }
                }else{
                    if(options.fieldSate == 1){
                        htmlObj.append('<td style="' + (options.visible ? '' : 'display:none;') + '"><input id="' + item[filed.headerField] + '" type="checkbox"></td>');
                    }else if(options.fieldSate == 2){
                        htmlObj.append('<td>' + (i + 1) + '</td>');
                    }else {
                        var formtFun = null;
                        if(typeof(options.formatName) == 'function')
                        	formtFun = options.formatName;
                    	else
                    		formtFun = eval(options.formatName);
                        if(formtFun == formatResultItemText)
                            htmlObj.append('<td style="' + (options.visible ? '' : 'display:none;') + '">' + formtFun(item[filed.headerField],options.dateFormat) + '</td>');
                        else
                            htmlObj.append('<td style="' + (options.visible ? '' : 'display:none;') + '">' + formtFun(item[filed.headerField]) + '</td>');
                    }
                }
            }
            $("#" + tableId).append(htmlObj);
        }
    }
    for(var index = list.length; index < page.pageSize; index++){
        var htmlObj = $("<tr" + ( i % 2 == 0 ? "" : " class='even'") + "></tr>");
        for(var x = 0; x < tableFields.length; x++){
            htmlObj.append('<td></td>');
        }
        $("#" + tableId).append(htmlObj);
    }
}

/**
 * 返回创建分页插件的函数
 * @param pagId 分页插件id
 * @param tableId 表格id
 * @returns {Function}
 */
function createPagination(pagId, tableId, options){
    options = $.extend({
        loadListFunction:"loadList",
        visiblePages:10
    },options || {});
    var jqp;
    var queryParmas = {};
    var pageIndex = 1;
    var totalCount = 0;
    var pageSize = 10;
    var list = eval(options.loadListFunction);
    return function(page, params){
        queryParmas = params;
        if(!jqp){
        	totalCount = page.totalCount;
            pageSize = page.pageSize;
            jqp = $.jqPaginator('#' + pagId, {
                visiblePages: options.visiblePages,
                currentPage: page.pageNumber,
                pageSize: page.pageSize,
                totalCounts: page.totalCount,
                onPageChange: function (num, type) {
                    if(num != pageIndex){
                        pageIndex = num;
                        list(tableId,num, pageSize,queryParmas);
                    }
                }
            });
        }else{
            pageSize = page.pageSize;
            jqp.jqPaginator("option",{
                pageSize:page.pageSize
            });
            pageIndex = page.pageNumber;
            totalCount = page.totalCount;
            jqp.jqPaginator("option",{
                currentPage:page.pageNumber,
                totalCounts:page.totalCount
            });
            if(totalCount == 0)
            	$("#" + pagId).css('display','none');
            else
            	$("#" + pagId).css('display','inline-block');
         }
        return jqp;
    };
}

//===============================
//表格全选，选中，取消选中  End
//===============================

//===============================
// 每个页面添加、编辑删除  Start
//===============================
/***
 * 点击查询
 * url---查询url
 */
function searchBtnClick(url){
	//点击查询
    $("#searchBtn").click(function(event){
        window.location.href = getPath() + url + $("#searchForm").serialize();
        event.preventDefault();
        isFilter = true;
    });
}
/***
 * 打开添加窗口
 * tableId---表格id
 * url---打开添加页面的url
 */
function addBtnClick(url,options){
    options = $.extend({
        dialogId:"",
        emptyList:[],//清空内容id
    },options || {});
	$("#addBtn").click(function () {
        if(options.emptyList && options.emptyList.length > 0){
            for(var i= 0 ; i < options.emptyList.length; i++){
                $("#" + options.emptyList[i]).empty();
            }
        }
        if(options.dialogId)
            $("#" + options.dialogId).load(getPath() +url);
        else
	        $("#addDialog").load(getPath() +url);
	});
}
/***
 * 打开编辑窗口
 * tableId---表格id
 * url---打开编辑页面的url
 */
function editBtnClick(tableId,url,options){
    options = $.extend({
        emptyList:[]//清空内容id
    },options || {});
	$("#editBtn").click(function () {
        var selectList = new Array();
        $("#"+tableId+" tr td :checkbox").each(function () {
            if (this.checked)
                selectList[selectList.length] = $(this).attr("id");
        });
        var promptWindow = null;
        if (selectList.length == 0) {
            promptWindow = createWindow("请选择要编辑的数据");
        }
        if (selectList.length > 1) {
            promptWindow = createWindow("一次只能编辑一条数据");
        }
        if (promptWindow != null) {
            promptWindow.dialog("open");
            return;
        }
        if(options.emptyList && options.emptyList.length > 0){
            for(var i= 0 ; i < options.emptyList.length; i++){
                $("#" + options.emptyList[i]).empty();
            }
        }
        $("#updateDialog").load(getPath() + url + selectList[0]);
    });
}

/***
 * 标记选中事件
 * tableId---表格id
 * url---打开编辑页面的url
 */
function signSLData(tableId,signSLUrl,successUrl,heightVal){
	$("#signSL").change(function () {
		var status=$('#signSL option:selected').val();
		if(status == -1){
			//当选中标记时不操作
     	}else{
     		var selectList = new Array();
    		$("#"+tableId+" tr td :checkbox").each(function () {
    		    if (this.checked)
    		        selectList[selectList.length] = $(this).attr("id");
    		});
    		var promptSelectWindow = null;
    		if (selectList.length == 0){
    			promptSelectWindow = createWindow("请选择要修改的数据");
    		}
    		if (promptSelectWindow == null) {
    			promptSelectWindow = $("<div><p style='margin: 5px;;'>你确定要修改该数据？</p></div>");
    			promptSelectWindow.appendTo("html");
    			promptSelectWindow.dialog({
    		        autoOpen: false,
    		        width: 200,
    		        height: heightVal,
    		        resizable: false,
    		        title: "系统提示",
    		        modal: true,
    		        buttons: [
    		            {
    		                text:"确定",
    		                buttonClass: "ui-button-text-error",
    		                click: function () {
    		                    var ids = selectList.join( "," );
    		                    post(getPath() + signSLUrl+ ids,{state:status},
    		                        function(resultObject){
    		                    		promptSelectWindow.dialog("close");
    		                            //createWindow("删除成功",{url:getPath() + successUrl}).dialog("open");
    		                            createWindow(resultObject,{url:getPath() + successUrl}).dialog("open");
    		                        }
    		                    );
    		                }
    		            },
    		            {
    		                text:"取消",
    		                click: function () {
    		                    $(this).dialog("close");
    		                }
    		            }
    		        ]
    		    });
    		}
    		promptSelectWindow.dialog("open");
		}
    });
}

/**
 * 删除选中的数据
 * tableId--表格id
 * deleteUrl--删除调用的url
 * successurl--删除成功后调用的url
 * heightVal---高度
 */
function deleteData(tableId,deleteUrl,successUrl,heightVal,options) {
    options = $.extend({
        callBack:null//如果该函数存在，忽略successUrl
    },options || {});
	$("#deleteBtn").click(function(){
		var selectList = new Array();
		$("#"+tableId+" tr td :checkbox").each(function () {
		    if (this.checked)
		        selectList[selectList.length] = $(this).attr("id");
		});
		var promptWindow = null;
		if (selectList.length == 0){
		    promptWindow = createWindow("请选择要删除的数据");
		}
		if (promptWindow == null) {
		    promptWindow = $("<div><p style='margin: 5px;;'>你确定要删除该数据？</p></div>");
		    promptWindow.appendTo("html");
		    promptWindow.dialog({
		        autoOpen: false,
		        width: 200,
		        height: heightVal,
		        resizable: false,
		        title: "系统提示",
		        modal: true,
		        buttons: [
		            {
		                text:"确定",
		                buttonClass: "ui-button-text-error",
		                click: function () {
		                    var ids = selectList.join( "," );
		                    post(getPath() + deleteUrl+ ids,{},
		                        function(resultObject){
		                           /* createWindow("删除成功",{
                                        url:getPath() + successUrl,
                                        callBack: options.callBack
                                    }).dialog("open");*/
		                            createWindow(resultObject,{
	                                	url:getPath() + successUrl
	                                	}).dialog("open");
		                        }
		                    );
		                }
		            },
		            {
		                text:"取消",
		                click: function () {
		                    $(this).dialog("close");
		                }
		            }
		        ]
		    });
		}
		promptWindow.dialog("open");
	});
}

/**
 * 删除选中的数据
 * tableId--表格id
 * deleteBtnId---删除按惯id
 * deleteUrl--删除调用的url
 * successurl--删除成功后调用的url
 * widthVal----宽度
 * heightVal---高度
 */
function deleteDataHasBtnId(tableId,deleteBtnId,deleteUrl,successUrl,widthVal,heightVal) {
	$("#"+deleteBtnId).click(function(){
		var selectList = new Array();
		$("#"+tableId+" tr td :checkbox").each(function () {
		    if (this.checked)
		        selectList[selectList.length] = $(this).attr("id");
		});
		var promptWindow = null;
		if (selectList.length == 0){
		    promptWindow = createWindow("请选择要删除的数据");
		}
		if (promptWindow == null) {
		    promptWindow = $("<div><p style='margin: 5px;;'>你确定要删除该数据？</p></div>");
		    promptWindow.appendTo("html");
		    promptWindow.dialog({
		        autoOpen: false,
		        width: widthVal,
		        height: heightVal,
		        resizable: false,
		        title: "系统提示",
		        modal: true,
		        buttons: [
		            {
		                text:"确定",
		                buttonClass: "ui-button-text-error",
		                click: function () {
		                    var ids = selectList.join( "," );
		                    post(getPath() + deleteUrl+ ids,{},
		                        function(resultObject){
		                            createWindow("删除成功",{url:getPath() + successUrl}).dialog("open");
		                            createWindow(resultObject,{
	                                	url:getPath() + successUrl
	                                	}).dialog("open");
		                        }
		                    );
		                }
		            },
		            {
		                text:"取消",
		                click: function () {
		                    $(this).dialog("close");
		                }
		            }
		        ]
		    });
		}
		promptWindow.dialog("open");
	});
}

/**
 * 创建添加或编辑窗口
 * @param id div的id
 * @param label 显示的标题，如：添加用户
 * @param formId 表单id
 * @param options 其他参数
 * @return 返回需要弹出的窗口
 */
function createEditWindow(id, label, formId, options){
	options = $.extend({
        width: 400,
        height: 300
    },options || {});
	//初始化添加窗口
    var addWindow = $("#" + id);
    addWindow.dialog({
        autoOpen: false,
        width: options.width,
        height: options.height,
        resizable: false,
        title: label,
        modal: true,
        buttons: {
            "保存": function () {
                $("#" + formId).submit();
            },
            "取消": function () {
                $(this).dialog("close");
            }
        },
        close: function(){
        	$(".jBox-wrapper").remove();
        }
    });
    return addWindow;
}

//===============================
// 每个页面添加、编辑删除  End
//===============================

//===============================
// 弹出Ztree类型下拉框  Start
//===============================

/**
 * 点击节点时，反向选择
 * @param e
 * @param treeId
 * @param treeNode
 * @returns {boolean}
 */
function onZTreeMenuClick(e, treeId, treeNode) {
    var zTree = $.fn.zTree.getZTreeObj(treeId);
    zTree.checkNode(treeNode, !treeNode.checked, true, true);
    return false;
}
/**
 * 显示树形菜单
 * @params data 包含：menuContentId树的内容id，
 */
function showMenu(event) {
    var cityObj = $(this);
    var cityOffset = cityObj.offset();
    var options = $.extend({
        left:cityOffset.left,
        top:cityOffset.top + cityObj.outerHeight()
    },event.data || {});
    $("#" + event.data.menuContentId).css({left:options.left, top:options.top}).slideDown("fast");
    $("#" + event.data.menuContentId).offset({left:options.left, top:options.top});
    event.data.targetId = $(this).attr("id");
    $("body").bind("mousedown",event.data, onBodyDown);
}
/**
 * 隐藏树形次啊单
 */
function hideMenu(data) {
    $("#" + data.menuContentId).fadeOut("fast");
    $("body").unbind("mousedown", onBodyDown);
}
/**
 * 隐藏树形菜单
 * @param event
 */
function onBodyDown(event) {
    if (!(event.target.id == event.data.targetId || event.target.id == event.data.menuContentId || $(event.target).parents("#" + event.data.menuContentId).length>0)) {
        hideMenu(event.data);
    }
}

/**
 * 选择改变，改变输入框的显示
 * @param attachTargetId 触发事件的id，用于显示名称等文本
 * @param targetId 目标id，用于显示id，提交到后台
 */
function onZTreeCheck(attachTargetId, targetId){
    return function onCheck(e, treeId, treeNode) {
        var zTree = $.fn.zTree.getZTreeObj(treeId),
            nodes = zTree.getCheckedNodes(true),
            v = "", ids = "";
        for (var i=0, l=nodes.length; i<l; i++) {
            v += nodes[i].name + ",";
            ids += nodes[i].id + ",";
        }
        if (v.length > 0 ) v = v.substring(0, v.length-1);
        if (ids.length > 0 ) ids = ids.substring(0, ids.length-1);
        var cityObj = $("#" + attachTargetId);
        cityObj.val(v);
        $("#" + targetId).val(ids);
    };
}

/**
 * 添加权限选择改变，改变输入框的显示
 * @param attachTargetId 触发事件的id，用于显示名称等文本
 * @param targetId 目标id，用于显示id，提交到后台
 */
function onDialogTreeOnClick(attachTargetId, targetId){
    return function onCheck(e, treeId, treeNode) {
        var zTree = $.fn.zTree.getZTreeObj(treeId);
        $("#" + attachTargetId).val(zTree.getNodeByTId(treeNode.tId).name);
        $("#" + targetId).val(zTree.getNodeByTId(treeNode.tId).id);
    };
}

//===============================
// 弹出Ztree类型下拉框  Start
//===============================

//左边树的高度,适合所有页面
function autoZTreeHeight(){
    $("#treeDiv").css("height",getWindowHeight()-$('.table_search_div_tree').height() - 9);
    window.onresize = function(){
        $("#treeDiv").css("height",getWindowHeight()-$('.table_search_div_tree').height() - 9);
    }
}

//===============================
// 整体布局  Start
//===============================
/**
 * 必须设置leftWith和rightWith中的任意一个，如果都设置，以left为主
 * @param leftId
 * @param leftWith
 * @param rightId
 * @param rightWith
 */
function setWithPercent(options){
//function setWithPercent(leftId, leftWith, rightId, rightWith, winWidth, options){
    options = $.extend({
        leftId:"",
        leftWith: 0,
        rightId: "",
        rightWith: 0,
        winWidth: 0,
        offset: 0//偏移量
    },options || {});
    if((options.leftWith | options.rightWith) && options.leftId && options.rightId){
        if(options.leftWith){
            $("#" + options.leftId).css("width", options.leftWith);
            $("#" + options.rightId).css("width", options.winWidth - options.leftWith - options.offset);
        }else if(options.rightWith){
            $("#" + options.rightId).css("width", options.rightWith);
            $("#" + options.leftId).css("width", options.winWidth - options.rightWith - options.options.offset);
        }
    }
}
//===============================
// 整体布局  End
//===============================

/**
 * 获取窗口宽度
 * @returns {number}
 */
function getWindowWith(){
    var winWidth = 0;
    if(window.innerWidth)
        winWidth = window.innerWidth;
    else if((document.body) && (document.body.clientWidth))
        winWidth = document.body.clientWidth;
    else if((document.body) && (document.body.offsetWidth))
        winWidth = document.body.offsetWidth;
    if(document.documentElement && document.documentElement.clientWidth)
        winWidth = document.documentElement.clientWidth;
    return winWidth;
}

/**
 * 获取窗口高度
 * @returns {number}
 */
function getWindowHeight(){
    var winHeight = 0;
    if(window.innerHeight)
        winHeight = window.innerHeight;
    else if((document.body) && (document.body.clientHeight))
        winHeight = document.body.clientHeight;
    else if((document.body) && (document.body.offsetHeight))
        winHeight = document.body.offsetHeight;
    if(document.documentElement && document.documentElement.clientHeight)
        winHeight = document.documentElement.clientHeight;
    return winHeight;
}

//去除所有控件的虚线框
function removeBlur(){
	//文件选择框除外，否则无法单击选择文件
	$("a,button").bind("focus",function(){
		if(this.blur){
			this.blur();
		}		
	});
}

/**
 * 有小数的加法计算
 * @param arg1
 * @param arg2
 * @returns {Number}
 */
function accAdd(arg1,arg2){
    var r1,r2,m;
    try{
        if(arg1.toString().indexOf(".") >= 0)
            r1=arg1.toString().split(".")[1].length;
        else
            r1 = 0;
    }catch(e){r1=0;}
    try{
        if(arg2.toString().indexOf(".") >= 0)
            r2=arg2.toString().split(".")[1].length;
        else
            r2 = 0;
    }catch(e){r2=0;}
    m=Math.max(r1,r2);
    if(m > 6)
        m = 6;
    return (parseInt(arg1*Math.pow(10,m))+parseInt(arg2*Math.pow(10,m)))/Math.pow(10,m);
}

/**
 * 有小数的加法计算
 * @param arg1
 * @param arg2
 * @returns {Number}
 */
function accDecrease(arg1,arg2){
    var r1,r2,m;
    try{
        if(arg1.toString().indexOf(".") >= 0)
            r1=arg1.toString().split(".")[1].length;
        else
            r1 = 0;
    }catch(e){r1=0;}
    try{
        if(arg2.toString().indexOf(".") >= 0)
            r2=arg2.toString().split(".")[1].length;
        else
            r2 = 0;
    }catch(e){r2=0;}
    m=Math.max(r1,r2);
    if(m > 6)
        m = 6;
    return (parseInt(arg1*Math.pow(10,m))-parseInt(arg2*Math.pow(10,m)))/Math.pow(10,m);
}

/**
 * 有小数的乘法计算
 * @param arg1
 * @param arg2
 * @returns {Number}
 */
function accMultiply(arg1,arg2){
    var r1,r2,m;
    try{
        if(arg1.toString().indexOf(".") >= 0)
            r1=arg1.toString().split(".")[1].length;
        else
            r1 = 0;
    }catch(e){r1=0;}
    try{
        if(arg2.toString().indexOf(".") >= 0)
            r2=arg2.toString().split(".")[1].length;
        else
            r2 = 0;
    }catch(e){r2=0;}
    m=Math.max(r1,r2);
    if(m > 6)
        m = 6;
    return (parseInt(arg1*Math.pow(10,m))*parseInt(arg2*Math.pow(10,m)))/Math.pow(10,2*m);
}
/**
 * 树查询,高亮显示并展示【模糊匹配搜索条件的树节点】
 * @author chm
 * @param treeId 树id
 * @param searchId 查询文本框的id
 */
function search_ztree(treeId,searchId){
    searchByFlag_ztree(treeId, searchId, "");
}

/**
 * 搜索树，高亮显示并展示【模糊匹配搜索条件的节点s】
 * @param treeId
 * @param searchConditionId		搜索条件Id
 * @param flag 					需要高亮显示的节点标识
 */
function searchByFlag_ztree(treeId, searchId, flag){
    //<1>.搜索条件
    var searchCondition = $('#'+searchId).val();
    //<2>.得到模糊匹配搜索条件的节点数组集合
    var highlightNodes = new Array();
    if(searchCondition != ""){
        var treeObj = $.fn.zTree.getZTreeObj(treeId);
        highlightNodes = treeObj.getNodesByParamFuzzy("name",searchCondition);
    }
    highlightAndExpand_ztree(treeId, highlightNodes,flag);
}
/**
 * 高亮显示并展示【指定节点】
 * @param treeId
 * @param highlightNodes 需要高亮显示的节点数组
 * @param flag			 需要高亮显示的节点标识
 */
function highlightAndExpand_ztree(treeId, highlightNodes,flag){
    var treeObj = $.fn.zTree.getZTreeObj(treeId);
    //<1>. 先把全部节点更新为普通样式
    var treeNodes = treeObj.transformToArray(treeObj.getNodes());
    for (var i = 0; i < treeNodes.length; i++) {
        treeNodes[i].highlight = false;
        treeObj.updateNode(treeNodes[i]);
    }
    //<2>.收起树, 只展开根节点下的一级节点
    //close_ztree(treeId);
    treeObj.expandAll(false);
    var node = treeObj.getNodes()[0];
    treeObj.expandNode(node,true);
    //<3>.把指定节点的样式更新为高亮显示，并展开
    if (highlightNodes != null) {
        for (var i = 0; i < highlightNodes.length; i++) {
            //高亮显示节点，并展开
            highlightNodes[i].highlight = true;
            treeObj.updateNode(highlightNodes[i]);
            //高亮显示节点的父节点的父节点....直到根节点，并展示
            var parentNode = highlightNodes[i].getParentNode();
            var parentNodes = getParentNodes_ztree(parentNode);
            treeObj.expandNode(parentNodes, true, false, true);
            treeObj.expandNode(parentNode, true, false, true);
        }
    }
}

/**
 * 收起树：只展开根节点下的一级节点
 * @param treeId
 */
function close_ztree(treeId){
    var treeObj = $.fn.zTree.getZTreeObj(treeId);
    var nodes = treeObj.transformToArray(treeObj.getNodes());
    var nodeLength = nodes.length;
    for (var i = 0; i < nodeLength; i++) {
        if (nodes[i].id == '0') {
            //根节点：展开
            treeObj.expandNode(nodes[i], true, true, false);
        } else {
            //非根节点：收起
            treeObj.expandNode(nodes[i], false, true, false);
        }
    }
}

/**
 * 递归得到指定节点的父节点的父节点....直到根节点
 */
function getParentNodes_ztree(node){
    if (node && node.getParentNode()) {
        return getParentNodes_ztree(node.getParentNode());
    } else {
        return node;
    }
}

/**
 * 设置树节点字体样式
 */
function setFontCss_ztree(treeId, treeNode) {
    if (treeNode.isParent == false){
        //叶子节点
        return (!!treeNode.highlight) ? {color:"#ff0000", "font-weight":"bold"} : {color:"#666666", "font-weight":"normal"};
    } else {
        //父节点
        return (!!treeNode.highlight) ? {color:"#ff0000", "font-weight":"bold"} : {color:"#666666", "font-weight":"bold"};
    }
}

//===============================
// jquery validate验证器扩展 START
//===============================
/**
 * 添加下拉列表选择框的判断，必选
 */
function addSelectValidator(){
    $.validator.addMethod(
        "select",
        function(value, element){
            if(!value){
            	return false;
            }else{
            	return true;
            }  
        },
        "必须选择一项"
    );
}
//===============================
// jquery validate验证器扩展 END
//===============================

//===============================
//jquery tabs控件
//===============================
function initTabs(divId, options) {
	var tab = $("#"+divId).tabs(options||{});
	tab.find("li").bind("click", function() {
		if(!$(this).hasClass("active")) {
			$(this).parent().find("li.active").removeClass("active");
			$(this).addClass("active");
		}
	});
	return tab;
}
